admin: allow multiple args for pin subcommand
authorRafael Fonseca <r4f4rfs@gmail.com>
Mon, 17 Jun 2019 14:41:00 +0000 (16:41 +0200)
committerAtomic Bot <atomic-devel@projectatomic.io>
Mon, 17 Jun 2019 15:06:09 +0000 (15:06 +0000)
Fixes #1816

Signed-off-by: Rafael Fonseca <r4f4rfs@gmail.com>
Closes: #1874
Approved by: rfairley

src/ostree/ot-admin-builtin-pin.c
tests/test-admin-deploy-2.sh

index f110983b8857cb29a30313e59a146852a357dfa2..ced0fcf3de37f8df1b4c523c2015ca5b7038cef4 100644 (file)
@@ -52,24 +52,39 @@ ot_admin_builtin_pin (int argc, char **argv, OstreeCommandInvocation *invocation
       return FALSE;
     }
 
-  const char *deploy_index_str = argv[1];
-  const int deploy_index = atoi (deploy_index_str);
-
-  g_autoptr(OstreeDeployment) target_deployment = ot_admin_get_indexed_deployment (sysroot, deploy_index, error);
-  if (!target_deployment)
-    return FALSE;
+  unsigned int nsuccess = 0;
+  for (unsigned int i = 1; i < argc; i++)
+    {
+      const char *deploy_index_str = argv[i];
+      const int deploy_index = atoi (deploy_index_str);
 
+      g_autoptr(GError) e = NULL;
+      g_autoptr(OstreeDeployment) target_deployment = ot_admin_get_indexed_deployment (sysroot, deploy_index, &e);
+      if (!target_deployment)
+        {
+          g_print ("Invalid deployment %s: %s\n", deploy_index_str, e->message);
+          continue;
+        }
 
-  gboolean current_pin = ostree_deployment_is_pinned (target_deployment);
-  const gboolean desired_pin = !opt_unpin;
-  if (current_pin == desired_pin)
-    g_print ("Deployment is already %s\n", current_pin ? "pinned" : "unpinned");
-  else
-    {
-      if (!ostree_sysroot_deployment_set_pinned (sysroot, target_deployment, desired_pin, error))
-        return FALSE;
-      g_print ("Deployment is now %s\n", desired_pin ? "pinned" : "unpinned");
+      gboolean current_pin = ostree_deployment_is_pinned (target_deployment);
+      const gboolean desired_pin = !opt_unpin;
+      if (current_pin == desired_pin)
+        {
+          g_print ("Deployment %s is already %s\n", deploy_index_str, current_pin ? "pinned" : "unpinned");
+          nsuccess++;
+        }
+      else
+      {
+        g_autoptr(GError) e = NULL;
+        if (ostree_sysroot_deployment_set_pinned (sysroot, target_deployment, desired_pin, &e))
+          {
+            g_print ("Deployment %s is now %s\n", deploy_index_str, desired_pin ? "pinned" : "unpinned");
+            nsuccess++;
+          }
+        else
+          g_print ("Failed to %s deployment %s: %s\n", desired_pin ? "pin" : "unpin", deploy_index_str, e->message);
+      }
     }
 
-  return TRUE;
+  return nsuccess > 0;
 }
index 3e68ecf3d6ca1c45bdb0535a64afef707c2afe77..0fa2df9bd68d8d8e8c9874afd9b18aa270dcee6d 100755 (executable)
@@ -102,8 +102,7 @@ ${CMD_PREFIX} ostree admin pin -u 0
 assert_n_pinned 0
 echo "ok pin unpin"
 
-${CMD_PREFIX} ostree admin pin 0
-${CMD_PREFIX} ostree admin pin 1
+${CMD_PREFIX} ostree admin pin 0 1
 assert_n_pinned 2
 assert_n_deployments 2
 os_repository_new_commit